package com.geo.geoProject.client.ecrans;

import com.geo.geoProject.client.donneesStatiques.ApplicationGestion;
import com.geo.geoProject.client.ecrans.connexion.EcranDeConnexion;
import com.geo.geoProject.client.ecrans.connexion.EcranDeConnexionListener;
import com.geo.geoProject.client.ecrans.geoLove.EcranGeoLove;
import com.geo.geoProject.client.ecrans.geoLove.EcranGeoLoveListener;
import com.geo.geoProject.shared.Utilisateur;

public class CycleDeVieDesEcrans implements EcranDeConnexionListener, EcranGeoLoveListener {

	///////////////////////////////////////
	////////////// SINGLETON //////////////
	///////////////////////////////////////
	private static CycleDeVieDesEcrans cycle = new CycleDeVieDesEcrans() ;
	private CycleDeVieDesEcrans() {}
	public static CycleDeVieDesEcrans get() {return cycle ;}
	///////////////////////////////////////
	///////////////////////////////////////
	///////////////////////////////////////
	
	// la liste des ecrans possibles
	
	public EcranDeConnexion ecranDeConnexion = null ;
	public EcranGeoLove     ecranGeoLove     = null ;
	
	
	// Initialisation de l'interface graphique
	
	public static void startup() {
		get().ecranDeConnexion  = new EcranDeConnexion() ; // on cree un ecran de connexion
		get().ecranDeConnexion.setEcouteur(get())        ; // on ecoute les evenements de l'ecran de connexion
		
		//get().ecranDeConnexion.init() ;
		
		chavirementDesEcrans(null, get().ecranDeConnexion) ;
		
	}
	
	///// evenements issus de l'écran de connexion
	
	/**
	 * Lorsque l'ecran de connexion demande une connexion.
	 */
	@Override
	public void demandeDeConnexion(String login, String motDePasse) {
		// TODO: changer le mode de connexion : faire une requette au serveur.
		if (ApplicationGestion.get().utilisateur==null) {
			ApplicationGestion.get().utilisateur = new Utilisateur(login, motDePasse);
		}
		ApplicationGestion.get().utilisateur.setStatus(Utilisateur.StatusUtilisateur.Authentifie) ;
		
		// ecran geolove
		if (get().ecranGeoLove==null) {
			get().ecranGeoLove = new EcranGeoLove() ; // on cree un ecran de geoLove
			get().ecranGeoLove.setEcouteur(get())   ; // on ecoute les evenements de l'ecran geoLove
		}
		
		chavirementDesEcrans(get().ecranDeConnexion, get().ecranGeoLove) ;
	}
	
	public void logout() {
		chavirementDesEcrans(get().ecranGeoLove, get().ecranDeConnexion) ;
	}

	
	
	///// AUTRES FONCTIONS UTILES POUR LES ECRANS
	
	/**
	 * virement des ecrans (on en enleve un pour en mettre un autre.
	 * On y ajoutera un effet de transition et des  appels aux initialisations des ecrans plus tard.
	 * 
	 * @param ecranAEnlever
	 * @param ecranAMettre
	 */
	private static void chavirementDesEcrans(
			Ecran ecranAEnlever,
			Ecran ecranAMettre) {
		if (ecranAEnlever!=null) {
			ecranAEnlever.ends() ; // ne plus afficher le premier
		}
		if (ecranAMettre!=null) {
			ecranAMettre .init() ;// afficher le second
		}
	}

}
